<?php

class BoletoController extends AdminController {

	private $dadosboleto; 
	
	protected function before(){
		if( !$this->isBoleto() ){
			
			parent::before();
			
		}else{
			
			$this->beforeWithSecurity();
		
			$this->dadosboleto = array();
			$boletoId = ( $this->containsParam('id') ) ? $this->getIdFrom() : null;
			
			if( !is_null($boletoId) ){
				
				$boletoModel = null;
				$contaModel = null;
				$clienteModel = null;
				$condominioModel = null;
			
				$dias_de_prazo_para_pagamento = 0;
				$taxa_boleto = 0;
				$data_venc = $boletoModel->vencimento; //date("d/m/Y", time() + ($dias_de_prazo_para_pagamento * 86400));  // Prazo de X dias OU informe data: "13/04/2006"; 
				$valor_cobrado = $boletoModel->valor; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
				$valor_cobrado = str_replace(",", ".",$valor_cobrado);
				$valor_boleto=number_format($valor_cobrado+$taxa_boleto, 2, ',', '');
				
				$this->dadosboleto["nosso_numero"] = $boletoModel->nosso_numero;
				$this->dadosboleto["numero_documento"] = $boletoModel->doc_cobranca;	// Num do pedido ou do documento
				$this->dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
				$this->dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
				$this->dadosboleto["data_processamento"] = date("d/m/Y"); // Data de processamento do boleto (opcional)
				$this->dadosboleto["valor_boleto"] = $valor_boleto; 	// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula
				
				// DADOS DO SEU CLIENTE
				$this->dadosboleto["sacado"] = $clienteModel->nome;
				$this->dadosboleto["endereco1"] = $clienteModel->logradouro.", ".$clienteModel->numero.", ".$clienteModel->bairro;
				$this->dadosboleto["endereco2"] = $clienteModel->cidade." - ".$clienteModel->estado." -  CEP: ".$clienteModel->cep;
				
				// INFORMACOES PARA O CLIENTE
				$this->dadosboleto["demonstrativo1"] = "Pagamento ao condomínio ".$condominioModel->nome;
				$this->dadosboleto["demonstrativo2"] = "Mensalidade referente à taxa de condomínio no valor de R$ ".number_format($valor_cobrado+$taxa_boleto, 2, ',', '');
				$this->dadosboleto["demonstrativo3"] = "BoletoPhp - http://www.boletophp.com.br";
				
				// INSTRUCOES PARA O CAIXA
				$this->dadosboleto["instrucoes1"] = "- Sr. Caixa, cobrar multa de 2% após o vencimento";
				$this->dadosboleto["instrucoes2"] = "- Receber até 10 dias após o vencimento";
				$this->dadosboleto["instrucoes3"] = "- Em caso de dúvidas entre em contato conosco: xxxx@xxxx.com.br";
				$this->dadosboleto["instrucoes4"] = "&nbsp; Emitido pelo sistema integrado com o Projeto BoletoPhp - www.boletophp.com.br";
				
				// DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
				$this->dadosboleto["quantidade"] = "1";
				$this->dadosboleto["valor_unitario"] = "1";
				$this->dadosboleto["aceite"] = "N";		
				$this->dadosboleto["especie"] = "R$";
				$this->dadosboleto["especie_doc"] = "DM";
				
				// ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
				
				// DADOS DA SUA CONTA
				$this->dadosboleto["agencia"] = $contaModel->agencia;  // Num da agencia, sem digito
				$this->dadosboleto["conta"] = $contaModel->numero; 	// Num da conta, sem digito
				
				// DADOS PERSONALIZADOS
				$this->dadosboleto["convenio"] = $contaModel->convenio;  // Num do convênio - REGRA: 6 ou 7 ou 8 dígitos
				$this->dadosboleto["contrato"] = $contaModel->contrato;  // Num do seu contrato
				
				$this->dadosboleto["carteira"] = $contaModel->carteira;
				$this->dadosboleto["variacao_carteira"] = $contaModel->variacao_carteira;  // Variação da Carteira, com traço (opcional)
				
				// TIPO DO BOLETO
				$this->dadosboleto["formatacao_convenio"] = strlen($contaModel->convenio); // REGRA: 8 p/ Convênio c/ 8 dígitos, 7 p/ Convênio c/ 7 dígitos, ou 6 se Convênio c/ 6 dígitos
				$this->dadosboleto["formatacao_nosso_numero"] = ( strlen($this->boletoInstance->nosso_numero) <= 5) ? "1" : "2"; // REGRA: Usado apenas p/ Convênio c/ 6 dígitos: informe 1 se for NossoNúmero de at� 5 dígitos ou 2 para op��o de at� 17 dígitos
				
				// SEUS DADOS
				$this->dadosboleto["identificacao"] = "BoletoPhp - Código Aberto de Sistema de Boletos";
				$this->dadosboleto["cpf_cnpj"] = $contaModel->condominio->inscricao;
				$this->dadosboleto["endereco"] = $contaModel->condominio->rua.", ".$contaModel->condominio->numero.", ".$contaModel->condominio->bairro." - ".$contaModel->condominio->cep;
				$this->dadosboleto["cidade_uf"] = $contaModel->condominio->cidade." / ".$contaModel->condominio->estado;
				$this->dadosboleto["cedente"] = $condominioModel->nome;
			
			}else{
				
				# Dados de teste para carregar EXEMPLOS!!! ##########################################################################
			
				$dias_de_prazo_para_pagamento = 5;
				$taxa_boleto = 2.95;
				$data_venc = date("d/m/Y", time() + ($dias_de_prazo_para_pagamento * 86400));  // Prazo de X dias OU informe data: "13/04/2006"; 
				$valor_cobrado = "2950,00"; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
				$valor_cobrado = str_replace(",", ".",$valor_cobrado);
				$valor_boleto=number_format($valor_cobrado+$taxa_boleto, 2, ',', '');
				
				$this->dadosboleto["nosso_numero"] = "87654";
				$this->dadosboleto["numero_documento"] = "27.030195.10";	// Num do pedido ou do documento
				$this->dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
				$this->dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
				$this->dadosboleto["data_processamento"] = date("d/m/Y"); // Data de processamento do boleto (opcional)
				$this->dadosboleto["valor_boleto"] = $valor_boleto; 	// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula
				
				// DADOS DO SEU CLIENTE
				$this->dadosboleto["sacado"] = "Nome do seu Cliente";
				$this->dadosboleto["endereco1"] = "Endereço do seu Cliente";
				$this->dadosboleto["endereco2"] = "Cidade - Estado -  CEP: 00000-000";
				
				// INFORMACOES PARA O CLIENTE
				$this->dadosboleto["demonstrativo1"] = "Pagamento de Compra na Loja Nonononono";
				$this->dadosboleto["demonstrativo2"] = "Mensalidade referente a nonon nonooon nononon<br>Taxa bancária - R$ ".number_format($taxa_boleto, 2, ',', '');
				$this->dadosboleto["demonstrativo3"] = "BoletoPhp - http://www.boletophp.com.br";
				
				// INSTRUCOES PARA O CAIXA
				$this->dadosboleto["instrucoes1"] = "- Sr. Caixa, cobrar multa de 2% após o vencimento";
				$this->dadosboleto["instrucoes2"] = "- Receber até 10 dias após o vencimento";
				$this->dadosboleto["instrucoes3"] = "- Em caso de dúvidas entre em contato conosco: xxxx@xxxx.com.br";
				$this->dadosboleto["instrucoes4"] = "&nbsp; Emitido pelo sistema Projeto BoletoPhp - www.boletophp.com.br";
				
				// DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
				$this->dadosboleto["quantidade"] = "10";
				$this->dadosboleto["valor_unitario"] = "10";
				$this->dadosboleto["aceite"] = "N";		
				$this->dadosboleto["especie"] = "R$";
				$this->dadosboleto["especie_doc"] = "DM";
				
				// ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
				
				// DADOS DA SUA CONTA
				$this->dadosboleto["agencia"] = "9999"; // Num da agencia, sem digito
				$this->dadosboleto["conta"] = "99999"; 	// Num da conta, sem digito
				
				// DADOS PERSONALIZADOS
				$this->dadosboleto["convenio"] = "7777777";  // Num do convênio - REGRA: 6 ou 7 ou 8 dígitos
				$this->dadosboleto["contrato"] = "999999"; // Num do seu contrato
				$this->dadosboleto["carteira"] = "18";
				$this->dadosboleto["variacao_carteira"] = "-019";  // Variação da Carteira, com traço (opcional)
				
				// TIPO DO BOLETO
				$this->dadosboleto["formatacao_convenio"] = "7"; // REGRA: 8 p/ Convênio c/ 8 dígitos, 7 p/ Convênio c/ 7 dígitos, ou 6 se Convênio c/ 6 dígitos
				$this->dadosboleto["formatacao_nosso_numero"] = "2"; // REGRA: Usado apenas p/ Convênio c/ 6 dígitos: informe 1 se for NossoNúmero de at� 5 dígitos ou 2 para op��o de at� 17 dígitos
				
				// SEUS DADOS
				$this->dadosboleto["identificacao"] = "BoletoPhp - Código Aberto de Sistema de Boletos";
				$this->dadosboleto["cpf_cnpj"] = "";
				$this->dadosboleto["endereco"] = "Coloque o endereço da sua empresa aqui";
				$this->dadosboleto["cidade_uf"] = "Cidade / Estado";
				$this->dadosboleto["cedente"] = "Coloque a Razão Social da sua empresa aqui";
			
			}
		
		}
	}
	
	protected function after(){
		if( !$this->isBoleto() ){
			parent::after();
		}else{
			$this->geraBoleto();
		}
	}
	
	/* ***************************************************************************************** */
	
	private function isBoleto() {
		return ($this->getAction() != "index");
	}

	private function geraBoleto(){
		$urlBaseResources 	= APP_VIEWS."boleto";
		$urlBaseBoletos 	= $urlBaseResources."/print_boleto/";
		Route::init($urlBaseResources);
		$viewBuffer = new ViewBuffer( $urlBaseBoletos . $this->getActionMethod() . ".php" );
		$viewBuffer->set("dadosboleto", $this->dadosboleto);
		$viewBuffer->render();
	}
	
	/* ***************************************************************************************** */
	
	public function bancoob(){
		
		$this->dadosboleto["modalidade_cobranca"] = "01";
		$this->dadosboleto["numero_parcela"] = "001";
	
		$this->template->content = View::factory('print_boleto/bancoob' );
		$this->template->content->dadosboleto = $this->dadosboleto;
	
	}
	
	public function banespa(){
	
		$this->dadosboleto["codigo_cedente"] = "40013012168"; 	// Código do cedente (Somente 11 digitos)
		$this->dadosboleto["ponto_venda"] = "400"; 				// Ponto de Venda = Agencia 
		$this->dadosboleto["carteira"] = "COB";  				// COB - SEM Registro
		$this->dadosboleto["nome_da_agencia"] = "ACLIMAÇÃO"; 	// Nome da agencia (Opcional)

	}
	
	public function banestes(){
	
		$this->dadosboleto["carteira"] = "00"; 	// Carteira do Tipo Cobrança SEM REGISTRO (Carteira 00) - Não é Carteira 11
		
		$this->dadosboleto["tipo_cobranca"] = "2";  // 2- Sem registro; 
											  		// 3- Caucionada; 
											  		// 4,5,6 e 7-Cobrança com registro
									  
	}
	
	public function bb(){
	
	}
	
	public function besc(){
	
		$this->dadosboleto["carteira"] = "25";  // Código da Carteira
		$this->dadosboleto["codigo_cedente"] = "01234-56";

	}
	
	public function bradesco(){
	
		$this->dadosboleto["conta_dv"] = "2"; 		// Digito do Num da conta
		$this->dadosboleto["agencia_dv"] = "2"; 	// Digito do Num da agencia
		
		$this->dadosboleto["conta_cedente"] = "001131";	// ContaCedente do Cliente, sem digito (Somente 6 digitos)
		$this->dadosboleto["conta_cedente_dv"] = "3"; 	// Digito da ContaCedente do Cliente

	}
	
	public function cef(){
		
		$this->dadosboleto["inicio_nosso_numero"] = "80";  	// Carteira SR: 80, 81 ou 82
															// Carteira CR: 90 (Confirmar com gerente qual usar)
		$this->dadosboleto["conta_dv"] = "4"; 				// Digito do Num da conta
		
		// DADOS PERSONALIZADOS - CEF
		$this->dadosboleto["conta_cedente"] = "87000000414"; // ContaCedente do Cliente, sem digito (Somente Números)
		$this->dadosboleto["conta_cedente_dv"] = "3"; 		 // Digito da ContaCedente do Cliente
		$this->dadosboleto["carteira"] = "SR"; 				 // Código da Carteira: pode ser SR (Sem Registro) ou CR (Com Registro) - (Confirmar com gerente qual usar)
		
	}
	
	public function cefSigcb(){
		
		// Composição Nosso Numero - CEF SIGCB
		$this->dadosboleto["nosso_numero1"] = "000"; 		// tamanho 3
		$this->dadosboleto["nosso_numero_const1"] = "2"; 	// constanto 1 , 1=registrada , 2=sem registro
		$this->dadosboleto["nosso_numero2"] = "000"; 		// tamanho 3
		$this->dadosboleto["nosso_numero_const2"] = "4"; 	// constanto 2 , 4=emitido pelo proprio cliente
		$this->dadosboleto["nosso_numero3"] = "000000019"; 	// tamanho 9
		
		$this->dadosboleto["conta_dv"] = "4"; 				// Digito do Num da conta
		
		// DADOS PERSONALIZADOS - CEF
		$this->dadosboleto["conta_cedente"] = "87000000414"; // ContaCedente do Cliente, sem digito (Somente Números)
		$this->dadosboleto["conta_cedente_dv"] = "3"; 		 // Digito da ContaCedente do Cliente
		$this->dadosboleto["carteira"] = "SR"; 				 // Código da Carteira: pode ser SR (Sem Registro) ou CR (Com Registro) - (Confirmar com gerente qual usar)
		
	}
	
	public function cefSinco(){
	
		$this->dadosboleto["inicio_nosso_numero"] = "9";		// Inicio do Nosso numero - obrigatoriamente deve começar com 9;
		$this->dadosboleto["campo_fixo_obrigatorio"] = "1";     // campo fixo obrigatorio - valor = 1
		$this->dadosboleto["conta_dv"] = "4"; 					// Digito do Num da conta
		
		// DADOS PERSONALIZADOS - CEF
		$this->dadosboleto["conta_cedente"] = "87000000414"; // ContaCedente do Cliente, sem digito (Somente Números)
		$this->dadosboleto["conta_cedente_dv"] = "3"; 		 // Digito da ContaCedente do Cliente
		$this->dadosboleto["carteira"] = "SR"; 				 // Código da Carteira: pode ser SR (Sem Registro) ou CR (Com Registro) - (Confirmar com gerente qual usar)
		
	}
	
	public function hsbc(){
		
		$this->dadosboleto["codigo_cedente"] = "1122334"; 	// Código do Cedente (Somente 7 digitos)
		$this->dadosboleto["carteira"] = "CNR";  			// Código da Carteira
	
		$this->template->content = View::factory('print_boleto/hsbc' );
		$this->template->content->dadosboleto = $this->dadosboleto;
	
	}
	
	public function itau(){
		
		$this->dadosboleto["conta_dv"] = "4"; 	// Digito do Num da conta
	
	}
	
	public function nossacaixa(){
		
		$this->dadosboleto["inicio_nosso_numero"] = "99";  // Inicio do Nosso numero -> 99 - Cobrança Direta(Carteira 5) ou 0 - Cobrança Simples(Carteira 1)
		
		// DADOS PERSONALIZADOS - CEF
		$this->dadosboleto["agencia"] = "0033"; 		// Num da agencia, sem digito
		$this->dadosboleto["conta_cedente"] = "001131"; // ContaCedente do Cliente, sem digito (Somente 6 digitos)
		$this->dadosboleto["conta_cedente_dv"] = "1"; 	// Digito da ContaCedente do Cliente
		$this->dadosboleto["carteira"] = "5";  			// Código da Carteira -> 5-Cobrança Direta ou 1-Cobrança Simples
		$this->dadosboleto["modalidade_conta"] = "04";  // modalidade da conta 02 posições
	
	}
	
	public function real(){
	
	}
	
	public function santanderBanespa(){
		
		// DADOS PERSONALIZADOS - SANTANDER BANESPA
		$this->dadosboleto["codigo_cliente"] = "0707077"; 	// Código do Cliente (PSK) (Somente 7 digitos)
		$this->dadosboleto["ponto_venda"] = "1333"; 		// Ponto de Venda = Agencia
		$this->dadosboleto["carteira"] = "102";  			// Cobrança Simples - SEM Registro
		
		$this->dadosboleto["carteira_descricao"] = "COBRANÇA SIMPLES - CSR";  // Descrição da Carteira
	
	}
	
	public function sicredi(){
		
		$this->dadosboleto["inicio_nosso_numero"] = date("y");	// Ano da geração do título ex: 07 para 2007 
		$this->dadosboleto["conta_dv"] = "6"; 					// Digito Verificador do Num da conta
		
		// DADOS PERSONALIZADOS - SICREDI
		$this->dadosboleto["posto"]= "18"; 		// Código do posto da cooperativa de crédito
		$this->dadosboleto["byte_idt"]= "2";	// Byte de identificação do cedente do bloqueto utilizado para compor o nosso número.
		                                  		// 1 - Idtf emitente: Cooperativa | 2 a 9 - Idtf emitente: Cedente
		$this->dadosboleto["carteira"] = "A";   // Código da Carteira: A (Simples) 
	
	}
	
	public function sudameris(){
	
	}
	
	public function unibanco(){
		
		$this->dadosboleto["conta_dv"] = "9"; 	// Digito do Num da conta
		
		// DADOS PERSONALIZADOS - UNIBANCO
		$this->dadosboleto["codigo_cliente"] = "2031671"; 	// Codigo do Cliente
		$this->dadosboleto["carteira"] = "20";  			// Código da Carteira
	
	}
	
	/* ***************************************************************************************** */
	
	public function index_action() {
		
	}
	
}

?>